#ifndef REAL_H
#define REAL_H

#include "constante.h"
#include "fraction.h"
#include "noncomplexnumber.h"

class Real : public NonComplexNumber
{
    double val;
public:

//Ce constructeur permet de creer un reel d'une certaine valeur passée en argument dans un double.

    Real(double d);


//Ce constructeur permet de creer un reel de la valeur de l'integer passee en argument. Il y aura conversion de l'int en double.

    Real(const Integer& i);

    Real(const Fraction& f);

//Cette méthode permet de soustraire du réel qui l'appelle  une autre constante passé en argument.
//Tout d'abord, on regarde le type de cet autre nombre. Si ce n'est pas un réel, on convertit cet autre nombre en réel puis on soustrait.
//Sinon, si il s'agit d'un autre réel, on renvoit un nouveau réel dont la valeur est la soustraction des valeurs de deux réels.
    Constante* operator-(const Constante& c)const;

    Constante* operator+(const Constante& c)const;

    Constante* operator*(const Constante& c)const;





 //Cette méthode inline permet d'afficher le réel dans le flux.
     std::string print()const {
            std::stringstream ss;
            ss << val;
            return ss.str();
        }
     std::string toExp()const{
            std::stringstream ss;
            ss << val;
            return ss.str();
        }

    Constante* operator/(const Constante& c)const;

//Cette méthode permettra d'obtenir l'opposé de la constante qui appelle la méthode. Pour cela, on renvoie un nouveau réel dont la valeur est l'opposé de celle de la constante qui a appelé la méthode.
    Constante* operator-()const;



//Cette méthode inline permet de récupérer la valeur d'un réel.

    double getVal()const{return val;}
};

#endif // REAL_H
